/*
 * FSWUniCEUB - 2008
 * 
 * Este arquivo é de propriedade da Fábrica de Software do UniCEUB
 * 
 * Para mais informações entre em contato com a coordenação do
 * curso de Ciência da Computação da instituição.
 */

package br.uniceub.fsw.talentos.dao;

import br.uniceub.fsw.arquitetura.persistencia.dao.BaseDAO;
import br.uniceub.fsw.arquitetura.persistencia.dao.ConstrutorSQL;
import br.uniceub.fsw.talentos.vo.DefinirGrupoTrabalhoVO;
import java.io.Serializable;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;

/**
 * Data Access Object - Definir Grupo de Trabalho
 * Camada de acesso ao banco de dados da entidade Definir Grupo de Trabalho.
 *
 * @author Ronaldo da Cruz Júnior
 */
public class DefinirGrupoTrabalhoDAO extends BaseDAO<DefinirGrupoTrabalhoVO> {

    @Override
    public void inserir(DefinirGrupoTrabalhoVO entidade) {
        ConstrutorSQL sql = new ConstrutorSQL();
        
        sql.append("UPDATE TB_TALENTO SET CD_GRUPOTRABALHO = ?");
        sql.append("WHERE ID_TALENTO = ?");
        
        List<?> parametros = criarParametros(entidade.getCdGrupoTrabalho());
        
        Integer idGerado = ((Long) executarInsercao(sql.toString(), parametros)).intValue();

        entidade.setIdTalento(idGerado);
    }
    
    @Override
    public void alterar(DefinirGrupoTrabalhoVO entidade) {
        ConstrutorSQL sql = new ConstrutorSQL();
        
        sql.append("UPDATE TB_TALENTO SET CD_GRUPOTRABALHO = ?");
        sql.append("WHERE ID_TALENTO = ?");
        
        executarAlteracao(sql.toString(), criarParametros(entidade.getCdGrupoTrabalho(), entidade.getIdTalento()));
    }
    
    @Override
    public void excluir(DefinirGrupoTrabalhoVO entidade) {
        ConstrutorSQL sql = new ConstrutorSQL();
        
        sql.append("DELETE FROM TB_TALENTO");
        sql.append("WHERE ID_TALENTO = ?");
        
        executarAlteracao(sql.toString(), criarParametros(entidade.getIdTalento()));
    }
    
    @Override
    public DefinirGrupoTrabalhoVO consultarPorId(Serializable id) {
        ConstrutorSQL sql = new ConstrutorSQL();
                
        sql.append("SELECT * FROM TB_TALENTO WHERE ID_TALENTO = ?");

        return consultarUm(sql.toString(), criarParametros(id));
    }
    
    @Override
    public List<DefinirGrupoTrabalhoVO> consultarPorExemplo(DefinirGrupoTrabalhoVO exemplo) {

        List<DefinirGrupoTrabalhoVO> listaRetorno = null;

        ConstrutorSQL query = new ConstrutorSQL();

        query.append("SELECT * FROM TB_TALENTO T WHERE 1=1");

        mapearQueryParaExemplo(query, exemplo);

        listaRetorno = consultar(query.toString(), recuperarParametros());

        return listaRetorno;
    }

    @Override
    protected DefinirGrupoTrabalhoVO extrairObjetoResultado(ResultSet rs) throws SQLException {

        DefinirGrupoTrabalhoVO acesso = new DefinirGrupoTrabalhoVO();
        acesso.setIdTalento(rs.getInt("ID_TALENTO"));
        acesso.setCdGrupoTrabalho(new Integer(rs.getInt("CD_GRUPOTRABALHO")));

        return acesso;
    }
    
    @Override
    protected void mapearQueryParaExemplo(ConstrutorSQL query, DefinirGrupoTrabalhoVO exemplo) {

        if (exemplo.getCdGrupoTrabalho() != null) {
            query.append("AND T.CD_GRUPOTRABALHO = ?");
            adicionarParametro(exemplo.getCdGrupoTrabalho());
        }

    }
}
